﻿#define _CRT_SECURE_NO_WARNINGS 1
//#include <stdio.h>
//#include <assert.h>
//char* my_strstr(const char* str1, const char* str2)
//{
//	if (str2 == NULL)
//	{
//		return (char*)str1;
//	}
//	assert(str1 && str2);
//	const char* s1 = str1;
//	const char* s2 = str2;
//	const char* p = str1;
//	while (*p)
//	{
//		s1 = p;
//		s2 = str2;
//		while (*s1 != '\0' && *s1 == *s2 && *s2 != '\0')
//		{
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')
//		{
//			return (char*)p;
//		}
//		p++;
//	}
//	return NULL;
//}
//int main()
//{
//	char arr1[] = "abbcdef";
//	char arr2[] = "bcd";
//	char* ret = my_strstr(arr1, arr2);
//	printf("%s\n", ret);
//	return 0;
//}


//#include <stdio.h>
//#include <stdlib.h>
//int main()
//{
//	int c; 
//	FILE* fp = fopen("test.txt", "r");
//	if (!fp)//fp==NULL 
//	{
//		perror("File opening failed");
//		return EXIT_FAILURE;
//	}
//	//fgetc 当读取失败的时候或者遇到文件结束的时候，都会返回EOF
//	while ((c = fgetc(fp)) != EOF) 
//	{
//		putchar(c);
//	}
//	printf("\n");
//	//判断是什么原因结束的
//	if (ferror(fp))//读取遇到错误
//		puts("I/O error when reading");
//	else if (feof(fp))//遇到文件末尾
//		puts("End of file reached successfully");
//	fclose(fp);
//	fp = NULL;
//	return 0;
//}


//#include <stdio.h>
//enum { SIZE = 5 };
//int main()
//{
//	double a[SIZE] = { 1.0,2.0,3.0,4.0,5.0 };
//	FILE* fp = fopen("test.bin", "wb"); 
//	if (fp == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//sizeof * a <——> sizeof(*a) <——> 这个也就是a数组的第一个元素
//	fwrite(a, sizeof * a, SIZE, fp);//写 double 的数组
//	fclose(fp);
//
//	double b[SIZE];
//	fp = fopen("test.bin", "rb");
//	size_t ret_code = fread(b, sizeof * b, SIZE, fp); // 读 double 的数组
//	if (ret_code == SIZE)//全部读取成功
//	{
//		puts("Array read successfully, contents: ");
//		for (int n = 0; n < SIZE; ++n)
//			printf("%f ", b[n]);
//		putchar('\n');
//	}
//	else 
//	{
//		if (feof(fp))//读取错误
//		{
//			printf("Error reading test.bin: unexpected end of file\n");
//		}
//		else if (ferror(fp)) //遇到文件末尾
//		{
//			perror("Error reading test.bin");
//		}
//	}
//	fclose(fp);
//	fp = NULL;
//	return 0;
//}


//#include <stdio.h>
//#include <windows.h>//Sleep函数所需的头文件
//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fputs("abcdef", pf);//先将代码放在输出缓冲区
//	printf("睡眠10秒-已经写数据了，打开test.txt文件，发现文件没有内容\n");
//	Sleep(10000);//休眠10000毫秒
//	printf("刷新缓冲区\n");
//	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到文件（磁盘）
//	printf("再睡眠10秒-此时，再次打开test.txt文件，文件有内容了\n");
//	Sleep(10000);
//	fclose(pf);
//	//注：fclose在关闭文件的时候，也会刷新缓冲区
//	pf = NULL;
//	return 0;
//}


//模拟实现strncpy
//#include <stdio.h>
//#include <assert.h>
//char* my_strncpy(char* str1, const char* str2, size_t num)
//{
//	char* ret = str1;
//	assert(str1 && str2);
//	while (num--)
//	{
//		*str1++ = *str2++;
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[] = "hello bit";
//	char arr2[20] = { 0 };
//	my_strncpy(arr2, arr1, 5);
//	printf("%s\n", arr2);
//	return 0;
//}


////模拟实现strncat
//#include <stdio.h>
//#include <assert.h>
//char* my_strncat(char* str1, const char* str2, size_t num)
//{
//	char* ret = str1;
//	assert(str1 && str2);
//	while (*str1++)
//	{
//		;
//	}
//	str1--;
//	while (num--)
//	{
//		*str1++ = *str2++;
//	}
//	*str1 = '\0';
//	return ret;
//}
//int main()
//{
//	char arr1[20] = "hello ";
//	char arr2[] = "bit xxx";
//	my_strncat(arr1, arr2, 3);
//	printf("%s\n", arr1);
//	return 0;
//}


////模拟实现memcpy
//#include <stdio.h>
//#include <assert.h>
//void* my_memcpy(void* dest, void* src, size_t num)
//{
//	void* ret = dest;
//	assert(dest && src);
//	while (num--)
//	{
//		*(char*)dest = *(char*)src;
//		dest = (char*)dest + 1;
//		src = (char*)src + 1;
//	}
//	return ret;
//}
//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	my_memcpy(arr2, arr1, 5 * sizeof(arr1[0]));
//	for (int i = 0; i < 5; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//	return 0;
//}